package org.gongliang.jsmile.common.kit;

import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

/**
 * 全局配置文件
 * 
 * @author 龚亮
 * @date 2017年3月30日 下午3:34:16
 */
public class ProKit extends PropertyPlaceholderConfigurer{

	/**
	 * 保存全局属性值
	 */
	private static Map<String, String> ctxPropertiesMap = new ConcurrentHashMap<String, String>();

	@Override
	protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) {
		super.processProperties(beanFactoryToProcess, props);
		for (Object key : props.keySet()) {
			String keyStr = key.toString();
			String value = props.getProperty(keyStr);
			ctxPropertiesMap.put(keyStr, value);
		}
	}

	/**
	 * 获取变量值
	 * 
	 * @param name
	 *            变量名称
	 * @return
	 */
	public static String getContextProperty(String name) {
		String value = ctxPropertiesMap.get(name);
		if (value != null && (value instanceof String)) {
			return value.trim();
		}
		return value;
	}

	/**
	 * 获取变量值，如果不存在，则取默认值
	 * 
	 * @param name
	 *            变量名称
	 * @param defaultValue
	 *            默认值
	 * @return
	 */
	public static Object getContextProperty(String name, Object defaultValue) {
		String value = getContextProperty(name);
		if (value == null || "".equals(value)) {
			return defaultValue;
		}
		return value;
	}

	/**
	 * 取出Integer类型的Property
	 */
	public static Integer getInteger(String key) {
		String value = getContextProperty(key);
		if (value == null) {
			throw new RuntimeException("properties中的" + key + "不存在!");
		}
		return Integer.valueOf(value);
	}

	/**
	 * 取出Integer类型的Property
	 */
	public static Integer getInteger(String key, Integer defaultValue) {
		String value = getContextProperty(key);
		return value != null ? Integer.valueOf(value) : defaultValue;
	}

	/**
	 * 取出String类型的Property
	 */
	public static String getString(String key) {
		String value = getContextProperty(key);
		if (value == null) {
			throw new RuntimeException("properties中的" + key + "不存在!");
		}
		return value;
	}

	/**
	 * 取出String类型的Property
	 */
	public static String getString(String key, String defaultValue) {
		String value = getContextProperty(key);
		return value != null ? value : defaultValue;
	}

	/**
	 * 取出Boolean类型的Property
	 */
	public static Boolean getBoolean(String key) {
		String value = getContextProperty(key);
		if (value == null) {
			throw new RuntimeException("properties中的" + key + "不存在!");
		}
		return Boolean.valueOf(value);
	}

	/**
	 * 取出Boolean类型的Property
	 */
	public static Boolean getBoolean(String key, boolean defaultValue) {
		String value = getContextProperty(key);
		return value != null ? Boolean.valueOf(value) : defaultValue;
	}

	/**
	 * 取出Long类型的Property
	 */
	public static Long getLong(String key) {
		String value = getContextProperty(key);
		if (value == null) {
			throw new RuntimeException("properties中的" + key + "不存在!");
		}
		return Long.valueOf(value);
	}

	/**
	 * 取出Long类型的Property
	 */
	public static Long getLong(String key, Long defaultValue) {
		String value = getContextProperty(key);
		return value != null ? Long.valueOf(value) : defaultValue;
	}
}
